package com.sjy.jnidemo2.cppcalljava;

import android.util.Log;

/**
 * c调用java
 */
public class CppCallJavaUtil {
    public static final String TAG = "SJY";


    //*******************************************native方法***********************************************
    static {
        System.loadLibrary("CppCallJava");
    }

    //<2-1> 非静态native方法调用CppCallJavaUtil对象中的方法
    public native void cppCallJavaMethod();

    //<2-2>
    public native int cppCallJavaFunReturnInt();

    //<2-3> 1
    public native CppCallJavaUtil nativeCppCallJavaMethodReturnClass();

    //<2-3> 2
    public native Person nativeCppCallJavaMethodReturnClass2();

    //<2-4>
    public native void nativeCppCallJavaStaticMethod();

    //<2-5>
    public native void nativeCppCallJavaMethodOutside();

    //<2-6>
    public native void nativeCppCallJavaMethodOutside2();

    //<2-7>
    public native static void staticCppCallJavaMethod();

    //<2-8>
    public native  void cppCallJavaField();


    //**********************************************java方法，供native层调用********************************************

    //<2-1> 非静态native方法调用CppCallJavaUtil对象中的方法callFun()
    public void callFun() {
        Log.d(TAG, "callFun: c++调用java CppCallJavaUtil对象中的callFun()方法");
    }

    /**
     * <2-2> 又返回值
     */
    public int callFunReturnInt() {
        return 1991;
    }

    /**
     * <2-3> 返回类1
     */
    public CppCallJavaUtil callFunReturnClass() {
        return new CppCallJavaUtil();
    }

    /**
     * <2-3> 返回类2
     */
    public Person callFunReturnClass2() {
        return new Person();
    }

    /**
     * <2-4> cpp调用java的静态方法
     */
    public static void callStaticFun() {
        Log.d(TAG, "cpp调用java的静态方法");
    }

    /**
     * <2-4> cpp调用java的静态方法(带参数)
     */
    public static void callStaticFun2(String name) {
        Log.d(TAG, "cpp调用java的静态方法-带参数：" + name);
    }


    /**
     * <2-7> 静态native 调用java的方法
     */
    public void staticCppCallFun() {
        Log.d(TAG, "静态native 调用java的方法:native的封装参数jobject变成jclass+AllocObject初始化jclass参数");
    }

    /**
     * <2-8> 调用java的变量
     */
    public int myAge = -11;
    public static String JniStateStr = "sjy test";



}
